home *** CD-ROM | disk | FTP | other *** search
- /* effects.c
- *
- * A small sound effects example with the DLL API
- *
- * Copyright 1996,1997 Housemarque Inc.
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
- #if defined(__NT__) || defined(__WINDOWS__) || defined(_MSC_VER)
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #endif
-
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
-
- #ifdef __DOS__
- #include <dos.h>
- #endif
-
- #include "midasdll.h"
-
- /* Use delay() for delays in DOS, Sleep() in Win32: */
- #ifdef __DOS__
- #define DELAY(x) delay(x)
- #else
- #define DELAY(x) Sleep(x)
- #endif
-
-
- /****************************************************************************\
- *
- * Function: void MIDASerror(void)
- *
- * Description: Handles a MIDAS error - displays an error message and exits
- *
- \****************************************************************************/
-
- void MIDASerror(void)
- {
- int error;
-
- error = MIDASgetLastError();
- printf("\nMIDAS error: %s\n", MIDASgetErrorMessage(error));
- if ( !MIDASclose() )
- {
- printf("\nBIG PANIC! MIDASclose Failed: %s\n", MIDASgetErrorMessage(
- MIDASgetLastError()));
- }
- exit(EXIT_FAILURE);
- }
-
-
- #define SWEEPSTEPS 16
-
-
- static MIDASsample sample1, sample2;
- static MIDASsamplePlayHandle playHandles[SWEEPSTEPS];
- static MIDASsamplePlayHandle laugh;
-
-
- int main(void)
- {
- int pan;
- unsigned i;
-
- MIDASstartup();
-
- setbuf(stdout, NULL);
-
- /* Flag that we don't have a module, effects or streams playing: */
- sample1 = sample2 = 0;
- for ( i = 0; i < 16; i++ )
- playHandles[i] = 0;
- laugh = 0;
-
- /* Decrease the size of buffer used: */
- MIDASsetOption(MIDAS_OPTION_MIXBUFLEN, 150);
- MIDASsetOption(MIDAS_OPTION_MIXBUFBLOCKS, 4);
-
- /* Initialize MIDAS and start background playback (at 100 polls
- per second): */
- if ( !MIDASinit() )
- MIDASerror();
- if ( !MIDASstartBackgroundPlay(100) )
- MIDASerror();
-
- /* Open five channels for our effects: */
- if ( !MIDASopenChannels(5) )
- MIDASerror();
-
- /* Use four first channels for automatic sound effects:
- (the last one will be used for a background laugh) */
- if ( !MIDASsetAutoEffectChannels(0, 4) )
- MIDASerror();
-
- /* Load our samples: */
- if ( (sample1 = MIDASloadRawSample("..\\data\\explosi1.pcm",
- MIDAS_SAMPLE_8BIT_MONO, MIDAS_LOOP_NO)) == 0 )
- MIDASerror();
- if ( (sample2 = MIDASloadRawSample("..\\data\\laugh1.pcm",
- MIDAS_SAMPLE_8BIT_MONO, MIDAS_LOOP_YES)) == 0 )
- MIDASerror();
-
- /* Start the laugh on channel 4 at volume 0: */
- if ( (laugh = MIDASplaySample(sample2, 4, 0, 16000, 0,
- MIDAS_PAN_SURROUND)) == 0 )
- MIDASerror();
-
- /* Fade laugh in: */
- for ( i = 0; i <= 64; i++ )
- {
- if ( !MIDASsetSampleVolume(laugh, i) )
- MIDASerror();
- DELAY(20);
- }
-
- /* Play machine gun fire, sweep panning from left to right: */
- pan = MIDAS_PAN_LEFT;
- for ( i = 0; i < SWEEPSTEPS; i++ )
- {
- if ( (playHandles[1] = MIDASplaySample(sample1, MIDAS_CHANNEL_AUTO,
- 0, 22050, 32, pan)) == 0 )
- MIDASerror();
-
- pan += (MIDAS_PAN_RIGHT - MIDAS_PAN_LEFT) / SWEEPSTEPS;
-
- DELAY(200);
- }
-
- /* Wait for a while for all gun sounds to stop: */
- DELAY(500);
-
- /* Stop the gun sounds: */
- for ( i = 0; i < SWEEPSTEPS; i++ )
- {
- if ( !MIDASstopSample(playHandles[i]) )
- MIDASerror();
- }
-
- /* Fade laugh out: */
- for ( i = 64; i > 0; i-- )
- {
- if ( !MIDASsetSampleVolume(laugh, i) )
- MIDASerror();
- DELAY(30);
- }
-
- /* Stop laugh: */
- if ( !MIDASstopSample(laugh) )
- MIDASerror();
-
- /* Free the samples: */
- if ( !MIDASfreeSample(sample1) )
- MIDASerror();
- if ( !MIDASfreeSample(sample2) )
- MIDASerror();
-
- /* Stop MIDAS: */
- if ( !MIDASstopBackgroundPlay() )
- MIDASerror();
- if ( !MIDASclose() )
- MIDASerror();
-
- return 0;
- }
-